#include <stdio.h>
#include <stdlib.h>
#include "ListeTirE.h"



void initListeTirE(ListeTirE *lTirE, VaisseauEnnemi *V)
{
    lTirE->adPremiere = (CelluleTirE *)malloc(sizeof (CelluleTirE));
    lTirE->adPremiere->tir = (TirEnnemi *)malloc(sizeof (TirEnnemi));
    //on initialise le tir ainsi que le tir precedent et suivant
    initTirE(lTirE->adPremiere->tir, V);
    //lTirE->adPremiere = NULL;
    lTirE->adPremiere->tirsuiv = NULL;
    lTirE->adPremiere->tirprec = NULL;
    lTirE->nbCellule=0;
}

void initListeTirEN(ListeTirE *lTirE, VaisseauEnnemi *V)
{
    lTirE->adPremiere = (CelluleTirE *)malloc(sizeof (CelluleTirE));
    lTirE->adPremiere->tir = (TirEnnemi *)malloc(sizeof (TirEnnemi));
    //on initialise le tir ainsi que le tir precedent et suivant
    initTirE(lTirE->adPremiere->tir, V);
    //lTirE->adPremiere = NULL;
    lTirE->adPremiere->tirsuiv = NULL;
    lTirE->adPremiere->tirprec = NULL;
    lTirE->nbCellule=0;
}


    ///*--------------------------------------------------*///
    ///* ------------- Fonctions ajoute tir ------------- *///
    ///*--------------------------------------------------*///

void ajouteTirE(ListeTirE *lTirE, VaisseauEnnemi *V)
{
    CelluleTirE *newTir;
    //on initialise et alloue de la place pour le tir
    newTir = (CelluleTirE *)malloc(sizeof (CelluleTirE));
    newTir->tir = (TirEnnemi *)malloc(sizeof (TirEnnemi));
    initTirE(newTir->tir, V);

    //Si la liste est vide
    if(lTirE->adPremiere == NULL)
	{
		newTir->tirprec = NULL;
		newTir->tirsuiv = NULL;
		lTirE->adPremiere = newTir;
	}
	else
	{
		CelluleTirE *temp = lTirE->adPremiere;
		//On va en fin de liste
		while (temp->tirsuiv != NULL)
        {
            temp = temp->tirsuiv;
        }
        //on met le tir en fin de liste
        temp->tirsuiv = newTir;
        newTir->tirprec = temp;
        newTir->tirsuiv = NULL;
	}
	lTirE->nbCellule++;
}

void ajouteTirE2(ListeTirE *lTirE, VaisseauEnnemi *V)
{
    CelluleTirE *newTir;
    //on initialise et alloue de la place pour le tir
    newTir = (CelluleTirE *)malloc(sizeof (CelluleTirE));
    newTir->tir = (TirEnnemi *)malloc(sizeof (TirEnnemi));
    initTirE2(newTir->tir, V);

    //Si la liste est vide
    if(lTirE->adPremiere == NULL)
	{
		newTir->tirprec = NULL;
		newTir->tirsuiv = NULL;
		lTirE->adPremiere = newTir;
	}
	else
	{
		CelluleTirE *temp = lTirE->adPremiere;
		//On va en fin de liste
		while (temp->tirsuiv != NULL)
			{
				temp = temp->tirsuiv;
			}
			//on met le tir en fin de liste
			temp->tirsuiv = newTir;
			newTir->tirprec = temp;
			newTir->tirsuiv = NULL;
	}
	lTirE->nbCellule++;
}

void ajouteTirE3(ListeTirE *lTirE, VaisseauEnnemi *V,int posx, int posy)
{
    CelluleTirE *newTir;
    //on initialise et alloue de la place pour le tir
    newTir = (CelluleTirE *)malloc(sizeof (CelluleTirE));
    newTir->tir = (TirEnnemi *)malloc(sizeof (TirEnnemi));
    initTirE3(newTir->tir, V, posx, posy);

    //Si la liste est vide
    if(lTirE->adPremiere == NULL)
	{
		newTir->tirprec = NULL;
		newTir->tirsuiv = NULL;
		lTirE->adPremiere = newTir;
	}
	else
	{
		CelluleTirE *temp = lTirE->adPremiere;
		//On va en fin de liste
		while (temp->tirsuiv != NULL)
        {
            temp = temp->tirsuiv;
        }
			//on met le tir en fin de liste
			temp->tirsuiv = newTir;
			newTir->tirprec = temp;
			newTir->tirsuiv = NULL;
	}
	lTirE->nbCellule++;
}
    /*---------------------------------------------------------*/
    /* ----------- Fonctions ajoute plusieurs tirs ----------- */
    /*---------------------------------------------------------*/

void nombreTirEN(ListeTirE *lTirE, ListeVaissE *VE,int nb)
{
int i;
CelluleVaissE *tempVE = VE->adPremiere;
        while(tempVE != NULL)
                {
                ajouteTirE(lTirE, tempVE->vaiss);
                tempVE = tempVE->vaisSuiv;
                }
}



void nombreTirE(ListeTirE *lTirE, VaisseauEnnemi *VE,int nb)
{
    int i;
    for(i=0; i<nb ;i++)
    {
        ajouteTirE(lTirE, VE);
    }
}

void nombreTirE2(ListeTirE *lTirE, VaisseauEnnemi *VE,int nb)
{
    int i;
    for(i=0; i<nb ;i++)
    {
        ajouteTirE2(lTirE, VE);
    }
}

/* ---------------------- Fonctions de libération de la mémoire -------------------------- */

void supprListeTirE(ListeTirE * l)
{
	CelluleTirE *temp = l->adPremiere;

	if(temp != NULL)
		{
			l->adPremiere = l->adPremiere->tirsuiv;

			if(l->adPremiere  != NULL)
				{
					l->adPremiere->tirprec = NULL;
				}
		}
	temp->tirsuiv = NULL;
	free(temp);
}

void videListeTirE(ListeTirE * l)
{
	while(l->adPremiere != NULL)
		{
			supprListeTirE(l);
		}
}

void testamentTirE(ListeTirE * l)
{
	videListeTirE(l);
}
